//
//  NHOrderByFirstLetter.m
//  02 英文按首字母排序
//
//  Created by dllo on 16/2/26.
//  Copyright © 2016年 dllo. All rights reserved.
//

#import "NHOrderByFirstLetter.h"

@implementation NHOrderByFirstLetter

// 第二个参数:排序的依据,或者说对于数组里的Model, 按那个字段排序
+ (NSMutableArray *)baseOrderPinYinOnArr:(NSMutableArray *)arr ByKey:(NSString *)key{
    if(key != nil){
        // 存放所有的英文首字母的数组
        NSMutableArray *firstLetterArr = [NSMutableArray array];
        // 创建一个有24个元素的数组,数组里的元素是字典
        // 字典里有两对Key - value
        // title : 当前的英文首字母
        // datas : 当前的英文首字母对应的model所组成的数组
        NSMutableArray *orderArr = [NSMutableArray array];
        for(NSInteger i = 0; i < 26; i++){
            char ch = 'A' + i;
            NSMutableArray *modelArr = [NSMutableArray array];
            NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:@"%c",ch],@"title",modelArr,@"datas", nil];
            [orderArr addObject:dic];
        }
        
        for (id model in arr) {
            // 获得当前需要排序的英文
            NSString *englishStr = [model valueForKey:key];
            // 获得英文首字母
            NSString *firstLetter = [[self class] getFirstLetterEnglish:englishStr];
            [firstLetterArr addObject:firstLetter];
        }
        // 排序
        // 对首字母排序
        for(NSInteger i = 0; i < firstLetterArr.count; i++){
            
            if(i == 64){
                continue;
            }
            // 获得当前首字母,并转换为ASCII码值,然后 - 65 转化为数组的下标
            // 取出下标对应的字典,将对应的Model添加到字典的数组中
            NSString *firstLetter = firstLetterArr[i];
            // 转为char
            const char *ch = [firstLetter cStringUsingEncoding:NSASCIIStringEncoding];
            
            // 数组的下标
            NSInteger index = ch[0] - 65;
            // 获得对应的数组
            NSMutableArray *modelArr = orderArr[index][@"datas"];
            [modelArr addObject:arr[i]];
        }
        return orderArr;
    }
    else{
        // 存放所有的英文首字母的数组
        NSMutableArray *firstLetterArr = [NSMutableArray array];
        // 创建一个有24个元素的数组,数组里的元素是字典
        // 字典里有两对Key - value
        // title : 当前的英文首字母
        // datas : 当前的英文首字母对应的model所组成的数组
        NSMutableArray *orderArr = [NSMutableArray array];
        for(NSInteger i = 0; i < 26; i++){
            char ch = 'A' + i;
            NSMutableArray *modelArr = [NSMutableArray array];
            NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:@"%c",ch],@"title",modelArr,@"datas", nil];
            [orderArr addObject:dic];
        }
        
        for (NSString *englishStr in arr) {
            
            // 获得英文首字母
            NSString *firstLetter = [[self class] getFirstLetterEnglish:englishStr];
            [firstLetterArr addObject:firstLetter];
        }
        // 排序
        // 对首字母排序
        for(NSInteger i = 0; i < firstLetterArr.count; i++){
            
            if(i == 64){
                continue;
            }
            // 获得当前首字母,并转换为ASCII码值,然后 - 65 转化为数组的下标
            // 取出下标对应的字典,将对应的Model添加到字典的数组中
            NSString *firstLetter = firstLetterArr[i];
            // 转为char
            const char *ch = [firstLetter cStringUsingEncoding:NSASCIIStringEncoding];
            
            // 数组的下标
            NSInteger index = ch[0] - 65;
            // 获得对应的数组
            NSMutableArray *modelArr = orderArr[index][@"datas"];
            [modelArr addObject:arr[i]];
        }
        return orderArr;
    }
}
// 获得英文的首字母
+ (NSString *)getFirstLetterEnglish:(NSString *)english{
    
    // 装换为可变字符串
    NSMutableString *englishM = [NSMutableString stringWithString:english];

    // 转化为大写
    NSString *englishCapital = [englishM capitalizedString];
    
    // 获取并返回大写首字母
    //    [english substringToIndex:1];
    return [englishCapital substringToIndex:1];
}

@end
